// null undefined

// 默认情况下 null和undefined只能赋予给null undefined
const n:null = null
const u:undefined = undefined
// 如果在非严格null检测情况下 ，那么 null undefined是任何类型的子类型

// void 类型 空类型 函数的返回值 可以用void来标示  其他情况下用不到
// undefined和void区别

function fn1():void{ //undefined可以赋予给void
    return undefined
}
// never类型  任何类型的子类型  never意味着 这个值不可能出现

// 1.函数无法到达终点
function whileTrue():never{
    while (true) {
        
    }
}
function trhrowError():never{
    throw new Error()
}
// 可以看到let a = 1 变灰了
function fn(){
    trhrowError()
    let a = 1
}

// 校验逻辑的完整性 可以利用never特性  实现完整性保护
function validateCheck(v:never){

}
// never类型的作用
function getResult(strOrBooleanOrNum:string|number|boolean){
    // 在内部写js逻辑的时候，要对每种类型做处理
    // 如果是字符串 'abc' -> [a, b, c]

    if(typeof strOrBooleanOrNum === 'string'){
        return strOrBooleanOrNum.split("")
    }else if(typeof strOrBooleanOrNum === 'number'){
        return strOrBooleanOrNum.toString().split("")
    }

    // 没有写boolean-----如果达不到never  则可以正常的运行
    validateCheck(strOrBooleanOrNum)
}



export{}